package com.atguigu.gmall.item.service;

import com.atguigu.starter.cache.annotation.GmallCache;

import java.util.Map;

/**
 * @author 钟涛
 * @version 1.0
 * @description: TODO
 * @date 2021/12/10 11:44
 */
public interface SkuDetailService {
    /**
     * 自定义注解@GmallCache包括的功能:是对getSkuDetailFromCache中的逻辑进行抽取。方便任意地方使用
     * 分布式缓存(redis)+分布式锁(Redisson框架提供)+布隆过滤器(Redisson框架提供) 来保证查询的高效性和安全性
     * @param skuId
     * @return
     */
    Map<String, Object> getSkuDetails(Long skuId);

    /**
     *
     * 分布式缓存(redis)+分布式锁(Redisson框架提供)+布隆过滤器(Redisson框架提供) 来保证查询的高效性和安全性
     *
     * @param skuId
     * @return
     * @throws Exception
     */
    Map<String, Object> getSkuDetailFromCache(Long skuId) throws Exception;

    /**
     *
     * 分布式缓存(redis)+分布式锁(Redisson框架提供)+布隆过滤器(Redisson框架提供)+异步编排执行的方式 来保证查询的高效性和安全性
     * @param skuId
     * @return
     */
    Map<String, Object> getSkuDetailsWithAsync(Long skuId);
}
